package com.example.service;

/*
@description:
@ClassName IdempotentService
@author chen
@create 2025-07-09 22:31
@Version 1.0
*/
public interface IdempotentService
{


    /*
     * @param idempotentKey   幂等key
     * @param r               需要执行的业务方法
     * @==============History===============<br/>
     * @Description //   幂等处理方法，可确保第2个参数中的业务的幂等性
     * @Date 2025-7-9 22:48
     * @Author < a href="15991488967@163.com">chen</ a>
     * @return -1：已处理过，1：本次处理成功
     */
    int idempotent(String idempotentKey, Runnable r);


    /*
     * @param busId        业务id
     * @param busType      业务类型
     * @param r            需要执行的业务方法
     * @==============History===============<br/>
     * @Description //     幂等处理方法，可确保第2个参数中的业务的幂等性
     * @Date 2025-7-9 22:46
     * @Author < a href="15991488967@163.com">chen</ a>
     * @return -1：已处理过，1：本次处理成功
     */
    default int idempotent(String busId, String busType, Runnable r)
    {
        String idempotentKey = String.format("%s:%s", busId, busType);
        return this.idempotent(idempotentKey, r);
    }
}
